<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 结算的时候  打折
        //    80%
        //    70%

        //    100-10

        // 普通写法
        // if(type === '80%') {}
        // if(type === '70%') {}

        // 策略模式
        //    把这些这些存入一个数据结构中
        // [
        //     {
        //         '80%' : 函数(总价)   
        //     } ,
        //     {
        //         '70%' : 函数(总价)   
        //     } ,
        //     {
        //         '300-10' : 函数(总价)   
        //     } ,
        // ]


        // const obj = {
        //     '8折' : function() {
        //         console.log(0.8);
        //         return 0.8
        //     } 
        // }

        // obj['8折']()


        // const count = (function(){
        //     const discountList = {
        //         '80%' : function(total) {
        //             return (total * 0.8).toFixed(2)
        //         } ,
        //         '70%' : function(total) {
        //             return (total * 0.7).toFixed(2)
        //         } 
        //     }

        //     function inner(total , type) {
        //         // 判断这个折扣方式是否存在
        //         if(!discountList[type])  {
        //             return total    // 不打折
        //         }
        //         return discountList[type](total)
        //     }


        //     // 添加新的折扣方式  
        //     function add(type , cb) {
        //         discountList[type] = cb 
        //     } 

        //     // 移出折扣方式
        //     function remove(type) {
        //         delete discountList[type]
        //     } 

        //     const obj = {
        //         add ,
        //         remove ,
        //         inner
        //     }
        //     return obj
        // })()


        // console.log(count);
        // const res = count.inner(1000 , '80%') ;
        // console.log(res);

        // count.remove('80%')

        // const res2 = count.inner(1000 , '80%') ;
        // console.log(res2);


        // const res3 = count.inner(1000 , '100-10') ;
        // console.log(res3);

        // count.add('300-10' , function(total) {
        //     return total - Math.floor(total / 300) * 10
        // }) ;

        // const res4 = count.inner(1000 , '300-10') ;
        // console.log(res4);



        const count = (function(){
            const discountList = {
                '80%' : function(total) {
                    return (total * 0.8).toFixed(2)
                } ,
                '70%' : function(total) {
                    return (total * 0.7).toFixed(2)
                } 
            }

            function inner(total , type) {
                // 判断这个折扣方式是否存在
                if(!discountList[type])  {
                    return total    // 不打折
                }
                return discountList[type](total)
            }


            // 函数也是一种对象，对象都可以添加属性和方法

            // 添加新的折扣方式  
            inner.add = function(type , cb) {
                discountList[type] = cb 
            }

            // 移出折扣方式
            inner.remove = function(type) {
                delete discountList[type]
            } 

            // 获取所有的打折方式
            inner.getDiscount = function() {
                return discountList
            }

            return inner 
        })()


        count.add('40%' , function(total){
            return (total * 0.4).toFixed(2)
        })




        
        const res = count(1000 , '40%') ;
        console.log(res);


        console.log(count.getDiscount());
        

    </script>
    
</body>
</html>